package student.aistar.day15.Thread02;

/**
 * join: 一种特殊得wait[等待], 当前运行线程调用另一个线程得join方法
 * 当前线程进入阻塞状态直到另一个线程运行结束等待该线程终止.
 * 注意该方法也需要捕捉异常, 等待调用join方法得线程结束, 再继续执行
 */
public class JoinDemo {
    public static void main(String[] args) {
        Thread mother = new Mother();
        mother.start();
    }
}
class Mother extends Thread{
    @Override
    public void run() {
        System.out.println("妈妈正在做饭");
        System.out.println("妈妈发现酱油没了");
        System.out.println("妈妈让熊孩子打酱油");

        //应该是希望儿子的线程介入进来了吧
        Thread son = new Son();
        son.start();//启动儿子线程

        try {
            //会把妈妈(其他)的线程阻塞, 让儿子线程执行完
            //等待调用join()方法的线程结束后才能继续执行
            son.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //期望的是这条语句一定是出现在最后的
        System.out.println("妈妈可以继续做饭了");
    }
}
class Son extends Thread{
    @Override
    public void run() {
        System.out.println("熊孩子接到任务...屁颠屁颠去打酱油");
        for (int i = 0; i < 5; i++) {
            System.out.println("熊孩子还有" + i + "分钟回来");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("熊孩在打酱油回来了");
    }
}